using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._GeoAnalyticsDesktopTools._Utilities._BigDataConnections
{
    /// <summary>
    /// <para>Update Big Data Connection Dataset Properties</para>
    /// <para>Updates the properties of a big data connection (BDC) dataset. This tool modifies field, geometry, time, and file settings for a specified BDC dataset.</para>
    /// <para>更新大数据连接 （BDC） 数据集的属性。此工具可修改指定 BDC 数据集的字段、几何、时间和文件设置。</para>
    /// </summary>    
    [DisplayName("Update Big Data Connection Dataset Properties")]
    public class UpdateBDCDatasetProperties : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public UpdateBDCDatasetProperties()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_bdc_dataset">
        /// <para>Big Data Connection Dataset</para>
        /// <para>The BDC dataset to update. The options for editing will differ depending on the source data (shapefile, delimited file, ORC, or parquet file).</para>
        /// <para>要更新的 BDC 数据集。编辑选项因源数据（shapefile、分隔文件、ORC 或 parquet 文件）而异。</para>
        /// </param>
        public UpdateBDCDatasetProperties(object _bdc_dataset)
        {
            this._bdc_dataset = _bdc_dataset;
        }
        public override string ToolboxName => "GeoAnalytics Desktop Tools";

        public override string ToolName => "Update Big Data Connection Dataset Properties";

        public override string CallName => "gapro.UpdateBDCDatasetProperties";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_bdc_dataset, _expression, _field_properties, _geometry_type.GetGPValue(), _spatial_reference, _geometry_format_type.GetGPValue(), _geometry_field, _x_field, _y_field, _z_field, _time_type.GetGPValue(), _time_zone, _start_time_format, _end_time_format, _file_extension, _field_delimiter, _record_terminator, _quote_character, _has_header_row.GetGPValue(), _encoding, _updated_bdc];

        /// <summary>
        /// <para>Big Data Connection Dataset</para>
        /// <para>The BDC dataset to update. The options for editing will differ depending on the source data (shapefile, delimited file, ORC, or parquet file).</para>
        /// <para>要更新的 BDC 数据集。编辑选项因源数据（shapefile、分隔文件、ORC 或 parquet 文件）而异。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Big Data Connection Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _bdc_dataset { get; set; }


        /// <summary>
        /// <para>Expression</para>
        /// <para>An expression used to limit the features that will be used in analysis.</para>
        /// <para>用于限制将在分析中使用的特征的表达式。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Expression")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _expression { get; set; } = null;


        /// <summary>
        /// <para>Field Properties</para>
        /// <para><xdoc>
        ///   <para>Specifies the field names and properties to modify.</para>
        ///   <bulletList>
        ///     <bullet_item>Short—The field will be type short.</bullet_item><para/>
        ///     <bullet_item>Long—The field will be type long</bullet_item><para/>
        ///     <bullet_item>Double—The field will be type double.</bullet_item><para/>
        ///     <bullet_item>Float—The field will be type float.</bullet_item><para/>
        ///     <bullet_item>String—The field will be type string.</bullet_item><para/>
        ///     <bullet_item>Date—The field will be type date.</bullet_item><para/>
        ///     <bullet_item>BLOB—The field will be type BLOB.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Specifies whether fields will be visible or hidden.
        ///   <bulletList>
        ///     <bullet_item>Checked—The fields will be visible and available for use in geoprocessing tools. This is the default.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The fields will be hidden and cannot be used as input to geoprocessing tools.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定要修改的字段名称和属性。</para>
        ///   <bulletList>
        ///     <bullet_item>短 - 字段类型为 short。</bullet_item><para/>
        ///     <bullet_item>Long - 字段类型为 long</bullet_item><para/>
        ///     <bullet_item>Double—字段类型为 double。</bullet_item><para/>
        ///     <bullet_item>Float—字段类型为 float。</bullet_item><para/>
        ///     <bullet_item>字符串 - 字段将为字符串类型。</bullet_item><para/>
        ///     <bullet_item>日期 - 字段将为输入日期。</bullet_item><para/>
        ///     <bullet_item>BLOB - 字段类型为 BLOB。</bullet_item><para/>
        ///   </bulletList>
        /// <para>指定字段是可见还是隐藏。
        ///   <bulletList>
        ///     <bullet_item>选中 - 字段将可见并可用于地理处理工具。这是默认设置。 </bullet_item><para/>
        ///     <bullet_item>未选中 - 字段将被隐藏，不能用作地理处理工具的输入。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Field Properties")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _field_properties { get; set; } = null;


        /// <summary>
        /// <para>Geometry Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of geometry that will be used to spatially represent the dataset. The geometry cannot be modified for shapefile-sourced datasets.</para>
        ///   <bulletList>
        ///     <bullet_item>Point—The geometry type is point.</bullet_item><para/>
        ///     <bullet_item>Polyline—The geometry type is polyline.</bullet_item><para/>
        ///     <bullet_item>Polygon—The geometry type is polygon.</bullet_item><para/>
        ///     <bullet_item>None—No geometry type.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于在空间上表示数据集的几何类型。无法修改 shapefile 源数据集的几何图形。</para>
        ///   <bulletList>
        ///     <bullet_item>点 （Point） - 几何类型为点。</bullet_item><para/>
        ///     <bullet_item>折线 - 几何类型为折线。</bullet_item><para/>
        ///     <bullet_item>面 - 几何类型为面。</bullet_item><para/>
        ///     <bullet_item>无 （None） - 无几何类型。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Geometry Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _geometry_type_value? _geometry_type { get; set; } = null;

        public enum _geometry_type_value
        {
            /// <summary>
            /// <para>Point</para>
            /// <para>Point—The geometry type is point.</para>
            /// <para>点 （Point） - 几何类型为点。</para>
            /// </summary>
            [Description("Point")]
            [GPEnumValue("POINT")]
            _POINT,

            /// <summary>
            /// <para>Polyline</para>
            /// <para>Polyline—The geometry type is polyline.</para>
            /// <para>折线 - 几何类型为折线。</para>
            /// </summary>
            [Description("Polyline")]
            [GPEnumValue("LINE")]
            _LINE,

            /// <summary>
            /// <para>Polygon</para>
            /// <para>Polygon—The geometry type is polygon.</para>
            /// <para>面 - 几何类型为面。</para>
            /// </summary>
            [Description("Polygon")]
            [GPEnumValue("POLYGON")]
            _POLYGON,

            /// <summary>
            /// <para>None</para>
            /// <para>None—No geometry type.</para>
            /// <para>无 （None） - 无几何类型。</para>
            /// </summary>
            [Description("None")]
            [GPEnumValue("NONE")]
            _NONE,

        }

        /// <summary>
        /// <para>Spatial Reference</para>
        /// <para>The WKID value or WKT string that will be used for the spatial reference of the dataset. The default is WKID 4326 (WGS84). The spatial reference cannot be modified for shapefile-sourced data.</para>
        /// <para>将用于数据集空间参考的 WKID 值或 WKT 字符串。默认值为 WKID 4326 （WGS84）。无法修改 shapefile 源数据的空间参考。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Reference")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _spatial_reference { get; set; } = null;


        /// <summary>
        /// <para>Geometry Format Type</para>
        /// <para><xdoc>
        ///   <para>Specifies how the geometry will be formatted. The geometry cannot be modified for shapefile-sourced data.</para>
        ///   <bulletList>
        ///     <bullet_item>XYZ—Two or more fields will represent x, y, and optionally z.</bullet_item><para/>
        ///     <bullet_item>WKT—The geometry will be represented by a single field in a well-known text field.</bullet_item><para/>
        ///     <bullet_item>WKB—The geometry will be represented by a single field in a well-known binary field.</bullet_item><para/>
        ///     <bullet_item>GeoJSON—The geometry will be represented by a single field in GeoJSON format.</bullet_item><para/>
        ///     <bullet_item>EsriJSON—The geometry will be represented by a single field in EsriJSON format.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定几何图形的格式设置方式。无法修改 shapefile 源数据的几何图形。</para>
        ///   <bulletList>
        ///     <bullet_item>XYZ - 两个或多个字段将表示 x、y 和可选的 z。</bullet_item><para/>
        ///     <bullet_item>WKT—几何将由已知文本字段中的单个字段表示。</bullet_item><para/>
        ///     <bullet_item>WKB—几何将由已知二进制字段中的单个字段表示。</bullet_item><para/>
        ///     <bullet_item>GeoJSON - 几何将由 GeoJSON 格式的单个字段表示。</bullet_item><para/>
        ///     <bullet_item>EsriJSON—几何将由 EsriJSON 格式的单个字段表示。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Geometry Format Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _geometry_format_type_value? _geometry_format_type { get; set; } = null;

        public enum _geometry_format_type_value
        {
            /// <summary>
            /// <para>XYZ</para>
            /// <para>XYZ—Two or more fields will represent x, y, and optionally z.</para>
            /// <para>XYZ - 两个或多个字段将表示 x、y 和可选的 z。</para>
            /// </summary>
            [Description("XYZ")]
            [GPEnumValue("XYZ")]
            _XYZ,

            /// <summary>
            /// <para>WKT</para>
            /// <para>WKT—The geometry will be represented by a single field in a well-known text field.</para>
            /// <para>WKT—几何将由已知文本字段中的单个字段表示。</para>
            /// </summary>
            [Description("WKT")]
            [GPEnumValue("WKT")]
            _WKT,

            /// <summary>
            /// <para>WKB</para>
            /// <para>WKB—The geometry will be represented by a single field in a well-known binary field.</para>
            /// <para>WKB—几何将由已知二进制字段中的单个字段表示。</para>
            /// </summary>
            [Description("WKB")]
            [GPEnumValue("WKB")]
            _WKB,

            /// <summary>
            /// <para>GeoJSON</para>
            /// <para>GeoJSON—The geometry will be represented by a single field in GeoJSON format.</para>
            /// <para>GeoJSON - 几何将由 GeoJSON 格式的单个字段表示。</para>
            /// </summary>
            [Description("GeoJSON")]
            [GPEnumValue("GEOJSON")]
            _GEOJSON,

            /// <summary>
            /// <para>EsriJSON</para>
            /// <para>EsriJSON—The geometry will be represented by a single field in EsriJSON format.</para>
            /// <para>EsriJSON—几何将由 EsriJSON 格式的单个字段表示。</para>
            /// </summary>
            [Description("EsriJSON")]
            [GPEnumValue("ESRIJSON")]
            _ESRIJSON,

        }

        /// <summary>
        /// <para>Geometry Field</para>
        /// <para>A single field used to represent the geometry. This field is used when the geometry format is WKT, WKB, GeoJSON, or EsriJSON.</para>
        /// <para>用于表示几何图形的单个字段。当几何格式为 WKT、WKB、GeoJSON 或 EsriJSON 时，将使用此字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Geometry Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _geometry_field { get; set; } = null;


        /// <summary>
        /// <para>X Field</para>
        /// <para>The field used to represent the x-location. If you have more than one field representing the x-location, modify the .bdc file manually.</para>
        /// <para>用于表示 x 位置的字段。如果有多个表示 x 位置的字段，请手动修改 .bdc 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("X Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _x_field { get; set; } = null;


        /// <summary>
        /// <para>Y Field</para>
        /// <para>The field used to represent the y-location. If you have more than one field representing the y-location, modify the .bdc file manually.</para>
        /// <para>用于表示 y 位置的字段。如果有多个表示 y 位置的字段，请手动修改 .bdc 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Y Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _y_field { get; set; } = null;


        /// <summary>
        /// <para>Z Field</para>
        /// <para>The field used to represent the z-location. If you have more than one field representing the z-location, modify the .bdc file manually.</para>
        /// <para>用于表示 z 位置的字段。如果有多个表示 z 位置的字段，请手动修改 .bdc 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _z_field { get; set; } = null;


        /// <summary>
        /// <para>Time Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the time type used to temporally represent the dataset.</para>
        ///   <bulletList>
        ///     <bullet_item>Interval—The time type will represent a duration of time with a start and end time.</bullet_item><para/>
        ///     <bullet_item>Instant—The time type will represent an instant in time.</bullet_item><para/>
        ///     <bullet_item>None—Time is not enabled.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定用于在时间上表示数据集的时间类型。</para>
        ///   <bulletList>
        ///     <bullet_item>间隔 - 时间类型将表示具有开始和结束时间的持续时间。</bullet_item><para/>
        ///     <bullet_item>即时 - 时间类型将表示时间中的瞬间。</bullet_item><para/>
        ///     <bullet_item>无 - 未启用时间。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _time_type_value? _time_type { get; set; } = null;

        public enum _time_type_value
        {
            /// <summary>
            /// <para>Instant</para>
            /// <para>Instant—The time type will represent an instant in time.</para>
            /// <para>即时 - 时间类型将表示时间中的瞬间。</para>
            /// </summary>
            [Description("Instant")]
            [GPEnumValue("INSTANT")]
            _INSTANT,

            /// <summary>
            /// <para>Interval</para>
            /// <para>Interval—The time type will represent a duration of time with a start and end time.</para>
            /// <para>间隔 - 时间类型将表示具有开始和结束时间的持续时间。</para>
            /// </summary>
            [Description("Interval")]
            [GPEnumValue("INTERVAL")]
            _INTERVAL,

            /// <summary>
            /// <para>None</para>
            /// <para>None—Time is not enabled.</para>
            /// <para>无 - 未启用时间。</para>
            /// </summary>
            [Description("None")]
            [GPEnumValue("NONE")]
            _NONE,

        }

        /// <summary>
        /// <para>Time Zone</para>
        /// <para>The time zone of the dataset.</para>
        /// <para>数据集的时区。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time Zone")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _time_zone { get; set; } = null;


        /// <summary>
        /// <para>Start Time</para>
        /// <para>The fields used to define the start time and the time formatting.</para>
        /// <para>用于定义开始时间和时间格式的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Start Time")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _start_time_format { get; set; } = null;


        /// <summary>
        /// <para>End Time</para>
        /// <para>The fields used to define the end time and the time formatting.</para>
        /// <para>用于定义结束时间和时间格式的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("End Time")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _end_time_format { get; set; } = null;


        /// <summary>
        /// <para>File Extension</para>
        /// <para>The file extension of the source dataset. The parameter value cannot be modified.</para>
        /// <para>源数据集的文件扩展名。参数值无法修改。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("File Extension")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _file_extension { get; set; } = null;


        /// <summary>
        /// <para>Field Delimiter</para>
        /// <para>The field delimiter used in the source dataset.</para>
        /// <para>源数据集中使用的字段分隔符。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Field Delimiter")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _field_delimiter { get; set; } = null;


        /// <summary>
        /// <para>Record Terminator</para>
        /// <para>The record terminator used in the source dataset.</para>
        /// <para>源数据集中使用的记录终止符。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Record Terminator")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _record_terminator { get; set; } = null;


        /// <summary>
        /// <para>Quote Character</para>
        /// <para>The quote character used in the source dataset.</para>
        /// <para>源数据集中使用的引号字符。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Quote Character")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _quote_character { get; set; } = null;


        /// <summary>
        /// <para>Has Header Row</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the source dataset includes a header row.
        ///   <bulletList>
        ///     <bullet_item>Checked—The source dataset includes a header row.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The source dataset does not include a header row.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定源数据集是否包含标题行。
        ///   <bulletList>
        ///     <bullet_item>选中 - 源数据集包括标题行。</bullet_item><para/>
        ///     <bullet_item>未选中 - 源数据集不包含标题行。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Has Header Row")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _has_header_row_value? _has_header_row { get; set; } = null;

        public enum _has_header_row_value
        {
            /// <summary>
            /// <para>HAS_HEADER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("HAS_HEADER")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_HEADER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_HEADER")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Encoding</para>
        /// <para>The type of encoding used by the source dataset. By default UTF-8 is used.</para>
        /// <para>源数据集使用的编码类型。默认情况下，使用 UTF-8。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Encoding")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _encoding { get; set; } = null;


        /// <summary>
        /// <para>Updated BDC</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated BDC")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_bdc { get; set; }


        public UpdateBDCDatasetProperties SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}